let OpenAI = require('openai');

const modelId = 'ep-20241212163531-p7lgb' // 模型id
const openai = new OpenAI({
  apiKey: 'd66ecbb3-20e0-4d37-98e4-dabefa988cdb',
  baseURL: 'https://ark.cn-beijing.volces.com/api/v3',
});

// 二：流式返回
let completionStream = null
module.exports = function (app, response) {
    app.get('/ai/session/**', async function (req, res) {
        console.log('request /ai/session', req.query.key)
        // 设置 SSE 所需的响应头
        res.setHeader('Content-Type', 'text/event-stream');
        res.setHeader('Cache-Control', 'no-cache');
        res.setHeader('Connection', 'keep-alive');
       
        try {
          // 示例消息，您可能希望从请求体中获取这些消息
          const messages = [
            { role: 'system', content: '你是豆包，是由字节跳动开发的 AI 人工智能助手' },
            { role: 'user', content: req.query.key || '写一篇500字的作文' }, // 这里你可以根据需要动态获取用户输入
          ];
          const model = modelId; // 使用预设的模型ID
       
          // 调用 OpenAI 并获取响应
          const time = Date.now()

          // 发送 SSE 数据给客户端
          completionStream = await openai.chat.completions.create({
            messages: messages,
            model: model,
            stream: true,
          });
          for await (const chunk of completionStream) {
            //   process.stdout.write(chunk.choices[0]?.delta?.content || '');
            console.log(JSON.stringify(chunk.choices[0]?.delta))
            //   res.write(`data: ${chunk.choices[0]?.delta?.content}\n\n`);
            const data = JSON.stringify({
                content: chunk.choices[0]?.delta?.content || ''
              });
              if(req.url.includes('/sse')) {
                res.write(`data:${data}\n\n`);
              } else {
                // res.write(`data:${chunk.choices[0]?.delta?.content}\n\n`);
                res.write(`data:${data}\n\n`);
              }
              
          }       
          // 关闭连接（可选，取决于您是否希望持续发送数据）
          console.log('时间差', parseInt((Date.now() - time) / 1000))
          res.end();
        } catch (error) {
          // 处理错误，并通过 SSE 发送错误消息给客户端
          console.error('Error fetching data:', error);
          res.write(`data: ${JSON.stringify({ error: 'Failed to fetch data' })}`);
          res.end();
        }
      });

      app.get('/ai/stopsession', async function (req, res) {
        console.log('request /ai/stopsession')
        if(completionStream) {
            completionStream.controller.abort()
        }
      })
}


// 一： 一次性返回
// let OpenAI = require('openai');
// const sse = require('express-sse');

// const modelId = 'ep-20241212163531-p7lgb' // 模型id
// const openai = new OpenAI({
//   apiKey: 'd66ecbb3-20e0-4d37-98e4-dabefa988cdb',
//   baseURL: 'https://ark.cn-beijing.volces.com/api/v3',
// });

// async function main(messages, model) {
//     // 注意：这里我移除了 stream 的部分，因为它对于简单的 GET 请求来说可能不是必需的。
//     // 如果你需要 stream，那么你需要一个更复杂的架构来处理它，因为它涉及到实时数据。
//     const completion = await openai.chat.completions.create({
//       messages: messages,
//       model: model,
//     });
//     return completion.choices[0]?.message?.content; // 返回 OpenAI 的响应内容
// }

// module.exports = function (app, response) {
//     // 工单
//     app.get('/ai/*', async function (req, res) {
//         if(req.url.includes('/session')) {
//             app.get('/ai/*', async function (req, res) {
//                 if(req.url.includes('/session')) {
//                     // 一：一次性返回
//                     try {
//                         const messages = [
//                           { role: 'system', content: '你是豆包，是由字节跳动开发的 AI 人工智能助手' },
//                           { role: 'user', content: '常见的十字花科植物有哪些？' }, // 这里你可以根据需要动态获取用户输入
//                         ];
//                         const model = 'ep-20241212163531-p7lgb'; // 或者从某处动态获取模型名称
//                         const responseContent = await main(messages, model); // 调用 main 函数并等待响应
//                         res.json({ response: responseContent }); // 将响应内容作为 JSON 发送给客户端
//                       } catch (error) {
//                         // 处理错误，例如记录日志或向客户端返回错误消息
//                         console.error('Error fetching data:', error);
//                         res.status(500).json({ error: 'Failed to fetch data' });
//                       }
//                 } else {
//                     res.send('Hello World')
//                 }
        
//             })
//         } else {
//             res.send('Hello World')
//         }

//     })
// }




